<?php

namespace SisesporteAdmin\Form;

use \Zend\Form\Form;
use Sisesporte\Entity\Pessoa;
use Sisesporte\Utils\Utils;

//use SisesporteAdmin\Filter\AlunoFilter;

class ProfessorForm extends Form {

    protected $entity;

    public function __construct($entity = NULL) {
        parent::__construct('professor');
        $this->entity = $entity;

        $this->setAttribute('method', 'post');
        //$this->setInputFilter(new ProfessorFilter());

        $this->add(array(
            'name' => 'noPessoa',
            'options' => array(
                'type' => 'text',
                'label' => 'Nome Completo*:'
            ),
            'attributes' => array(
                'id' => 'noPessoa',
                'class' => 'input-xxlarge'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\File',
            'name' => 'txCaminhoFoto',
            'options' => array(
                'label' => 'Imagem:'
            ),
            'attributes' => array(
                'id' => 'txCaminhoFoto'
            )
        ));

        $noImagem = new \Zend\Form\Element\File('noImagem');
        $noImagem->setLabel('Imagem:')
                ->setAttribute('id', 'noImagem')
                ->setName('noImagem');
        $this->add($noImagem);

        $this->add(array(
            'name' => 'dtNascimento',
            'options' => array(
                'type' => 'text',
                'label' => 'Data de Nascimento*:'
            ),
            'attributes' => array(
                'id' => 'dtNascimento',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'nuCpf',
            'options' => array(
                'type' => 'text',
                'label' => 'CPF:'
            ),
            'attributes' => array(
                'id' => 'nuCpf',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'name' => 'nuIdentidade',
            'options' => array(
                'type' => 'text',
                'label' => 'Identidade*:'
            ),
            'attributes' => array(
                'id' => 'nuIdentidade',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqOrgaoExpIdentidade',
            'options' => array(
                'label' => 'Órgão Expedidor:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\OrgaoExpedidor'),
            ),
            'attributes' => array(
                'id' => 'sqOrgaoExpIdentidade'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqUfOrgExpedidor',
            'options' => array(
                'label' => 'UF:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Uf'),
            ),
            'attributes' => array(
                'id' => 'sqUfOrgExpedidor'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqUfCref',
            'options' => array(
                'label' => 'UF*:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Uf'),
            ),
            'attributes' => array(
                'id' => 'sqUfCref'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqUf',
            'options' => array(
                'label' => 'UF*:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Uf'),
            ),
            'attributes' => array(
                'id' => 'sqUf'
            )
        ));

        $this->add(array(
            'name' => 'dtExpedicao',
            'options' => array(
                'type' => 'text',
                'label' => 'Data de Expedição:'
            ),
            'attributes' => array(
                'id' => 'dtExpedicao',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'nuCep',
            'options' => array(
                'type' => 'text',
                'label' => 'CEP*:'
            ),
            'attributes' => array(
                'id' => 'nuCep',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'noEndereco',
            'options' => array(
                'type' => 'text',
                'label' => 'Endereço:'
            ),
            'attributes' => array(
                'id' => 'noEndereco',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'name' => 'noComplemento',
            'options' => array(
                'type' => 'text',
                'label' => 'Complemento:'
            ),
            'attributes' => array(
                'id' => 'noComplemento',
                'class' => 'input-xxlarge'
            )
        ));

        $this->add(array(
            'name' => 'noBairro',
            'options' => array(
                'type' => 'text',
                'label' => 'Bairro:'
            ),
            'attributes' => array(
                'id' => 'noBairro',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqCidade',
            'options' => array(
                'label' => 'Cidade:',
                'empty_option' => '-- Selecione --',
                'value_options' => array(),
            ),
            'attributes' => array(
                'id' => 'sqCidade'
            )
        ));

        $this->add(array(
            'name' => 'noTelefoneFixo',
            'options' => array(
                'type' => 'text',
                'label' => 'Telefone Fixo*:'
            ),
            'attributes' => array(
                'id' => 'noTelefoneFixo',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'name' => 'noTelefoneMovel',
            'options' => array(
                'type' => 'text',
                'label' => 'Telefone Móvel:'
            ),
            'attributes' => array(
                'id' => 'noTelefoneMovel',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'name' => 'noEmail',
            'options' => array(
                'type' => 'email',
                'label' => 'E-mail*:'
            ),
            'attributes' => array(
                'id' => 'noEmail',
                'class' => 'input-xxlarge'
            )
        ));

        $this->add(array(
            'name' => 'noConfirmaEmail',
            'options' => array(
                'type' => 'email',
                'label' => 'Confirmar E-mail*:'
            ),
            'attributes' => array(
                'id' => 'noConfirmaEmail',
                'class' => 'input-xxlarge'
            )
        ));


        $this->add(array(
            'name' => 'noMae',
            'options' => array(
                'type' => 'text',
                'label' => 'Nome da mãe*:'
            ),
            'attributes' => array(
                'id' => 'noMae',
                'class' => 'input-xxlarge'
            )
        ));

        $this->add(array(
            'name' => 'noPai',
            'options' => array(
                'type' => 'text',
                'label' => 'Nome do Pai*:'
            ),
            'attributes' => array(
                'id' => 'noPai',
                'class' => 'input-xxlarge'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqEstadoCivil',
            'options' => array(
                'label' => 'Estado Civil*:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\EstadoCivil'),
            ),
            'attributes' => array(
                'id' => 'sqEstadoCivil'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Radio',
            'name' => 'inSexo',
            'options' => array(
                'label' => 'Sexo:',
                'value_options' => array(
                    'M' => 'Masculino',
                    'F' => 'Feminino',
                ),
            )
        ));
        $this->add(array(
            'name' => 'nuFilho',
            'options' => array(
                'type' => 'text',
                'label' => 'Quantidade de Filhos*:'
            ),
            'attributes' => array(
                'id' => 'nuFilho',
                'class' => 'input-mini'
            )
        ));

        $this->add(array(
            'name' => 'noContato',
            'options' => array(
                'type' => 'text',
                'label' => 'Em caso de emergência avisar*:'
            ),
            'attributes' => array(
                'id' => 'noResponsavelR',
                'class' => 'input-xlarge'
            )
        ));

        $this->add(array(
            'name' => 'noTelefone',
            'options' => array(
                'type' => 'text',
                'label' => 'Telefone*:'
            ),
            'attributes' => array(
                'id' => 'noTelefone',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'noTelefoneR',
            'options' => array(
                'type' => 'text',
                'label' => 'Telefone:'
            ),
            'attributes' => array(
                'id' => 'noTelefoneR',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'deEspecialidade',
            'options' => array(
                'type' => 'text',
                'label' => 'Cargo/Especialidade:'
            ),
            'attributes' => array(
                'id' => 'deEspecialidade',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'coMatricula',
            'options' => array(
                'type' => 'text',
                'label' => 'Matrícula*:'
            ),
            'attributes' => array(
                'id' => 'coMatricula',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'nuCargaHoraria',
            'options' => array(
                'label' => 'Carga Horária*:',
                'empty_option' => '-- Selecione --',
                'value_options' => array(
                    20 => '20hs',
                    30 => '30hs',
                    40 => '40hs',
                ),
            ),
            'attributes' => array(
                'id' => 'nuCargaHoraria'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'noLotacao',
            'options' => array(
                'label' => 'Lotação*:',
                'empty_option' => '-- Selecione --',
                'value_options' => array(
                    'C' => 'Centro Olímpico',
                    'E' => 'Escola de Esporte',
                ),
            ),
            'attributes' => array(
                'id' => 'noLotacao'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'coOrgaoAdmissao',
            'options' => array(
                'label' => 'Órgão de Origem*:',
                'empty_option' => '-- Selecione --',
                'value_options' => array(
                    '1' => 'SESP',
                    '2' => 'SEE',
                    '3' => 'Outro Orgão',
                ),
            ),
            'attributes' => array(
                'id' => 'coOrgaoAdmissao'
            )
        ));
        
        $this->add(array(
            'name' => 'noOrgaoAdmissao',
            'options' => array(
                'type' => 'text',
                'label' => 'Orgão:'
            ),
            'attributes' => array(
                'id' => 'noOrgaoAdmissao',
                'class' => 'input-large'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqGrauEscolaridade',
            'options' => array(
                'label' => 'Escolaridade*:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\GrauEscolaridade'),
            ),
            'attributes' => array(
                'id' => 'sqGrauEscolaridade'
            )
        ));

        $this->add(array(
            'name' => 'dtInicioSesp',
            'options' => array(
                'type' => 'text',
                'label' => 'Admissão SESP*:'
            ),
            'attributes' => array(
                'id' => 'dtInicioSesp',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'dtInicioAdmissao',
            'options' => array(
                'type' => 'text',
                'label' => 'Data de admissão no òrgão de Origem*:'
            ),
            'attributes' => array(
                'id' => 'dtInicioAdmissao',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'dtFinalAdmissao',
            'options' => array(
                'type' => 'text',
                'label' => 'Desligamento SESP:'
            ),
            'attributes' => array(
                'id' => 'dtFinalAdmissao',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'noCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Registro CREF*:'
            ),
            'attributes' => array(
                'id' => 'noCref',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'dtExpedicaoCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Expedição CREF*:'
            ),
            'attributes' => array(
                'id' => 'dtExpedicaoCref',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'dtValidadeCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Validade CREF*:'
            ),
            'attributes' => array(
                'id' => 'dtValidadeCref',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'noCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Registro CREF*:'
            ),
            'attributes' => array(
                'id' => 'noCref',
                'class' => 'input-medium'
            )
        ));
        $this->add(array(
            'name' => 'deCategoriaCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Categoria CREF:'
            ),
            'attributes' => array(
                'id' => 'deCategoriaCref',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'deAtuacaoCref',
            'options' => array(
                'type' => 'text',
                'label' => 'Atuação CREF:'
            ),
            'attributes' => array(
                'id' => 'deAtuacaoCref',
                'class' => 'input-medium'
            )
        ));

        $this->add(array(
            'name' => 'txObservacao',
            'type' => 'Textarea',
            'options' => array(
                'label' => 'OBS:',
            ),
            'attributes' => array(
                'id' => 'txObservacao',
                'rows' => '6',
                'cols' => '10',
                'style' => 'width: 88%; height: 20%'
            )
        ));

        $this->add(array(
            'name' => 'salvar',
            'type' => 'Zend\Form\Element\Submit',
            'attributes' => array(
                'value' => 'Salvar',
                'title' => 'Salvar',
                'class' => 'btn btn-primary pull-right'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqUfDadosPessoais',
            'options' => array(
                'label' => 'UF*:',
                'empty_option' => '-- Selecione --',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Uf'),
            ),
            'attributes' => array(
                'id' => 'sqUfDadosPessoais'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqCidadeDadosPessoais',
            'options' => array(
                'label' => 'Cidade:',
                'empty_option' => '-- Selecione uma UF --',
            ),
            'attributes' => array(
                'id' => 'sqCidadeDadosPessoais'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Hidden',
            'name' => 'sqCidadeDadosPessoaisH',
            'attributes' => array(
                'id' => 'sqCidadeDadosPessoaisH'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Hidden',
            'name' => 'sqCidadeH',
            'attributes' => array(
                'id' => 'sqCidadeH'
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\MultiCheckbox',
            'name' => 'sqModalidade',
            'options' => array(
                'label' => 'Modalidades*',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Modalidade'),
            )
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Select',
            'name' => 'sqCidadeView',
            'options' => array(
                'label' => 'Cidade:',
                'value_options' => $this->getResultArray('Sisesporte\Entity\Cidade'),
            ),
            'attributes' => array(
                'id' => 'sqCidadeView'
            )
        ));
        
        $this->add(array(
            'name' => 'cancelar',
            'type' => 'Zend\Form\Element\Button',
            'label' => 'Cancelar',
            'attributes' => array(
                'value' => 'Cancelar',
                'title' => 'Cancelar',
                'class' => 'btn btn-primary pull-right'
            )
        ));
    }

    /**
     * @return array
     */
    protected function getResultArray($repository) {
        $repo = $this->entity->getRepository($repository);
        return $repo->fetchPairs();
    }

    public function setDefaultsFromEntity(Pessoa $obj) {
        
//        echo '<pre>';
//        var_dump($obj->getSqPessoa());
//        echo '</pre>';exit;
        
        $repoEndereco = $this->entity->getRepository("Sisesporte\Entity\Endereco");
        $objEndereco = $repoEndereco->findby(array('sqPessoa' => $obj->getSqPessoa()));

        $repoCidade = $this->entity->getRepository("Sisesporte\Entity\Cidade");
        $objCidade = $repoCidade->findby(array('sqCidade' => $objEndereco[0]->getSqCidade()->getSqCidade()));

        $repoT = $this->entity->getRepository("Sisesporte\Entity\Telefone");
        $objTelefone = $repoT->findby(array('sqPessoa' => $obj), NULL);

//        echo "<pre>";
//        var_dump($objTelefone[0]->getSqTipoTelefone()->getSqTipoTelefone());
//        echo "</pre>";
        
        foreach ($objTelefone as $telefone) {
            if ($telefone->getSqTipoTelefone()->getSqTipoTelefone() == '1') {
                $noTelefoneFixo = $telefone->getNoTelefone();
            }
            if ($telefone->getSqTipoTelefone()->getSqTipoTelefone() == '4') {
                $noTelefoneMovel = $telefone->getNoTelefone();
            }
        }

        $repoC = $this->entity->getRepository("Sisesporte\Entity\Contato");
        $objContato = $repoC->findby(array('sqPessoa' => $obj->getSqPessoa()), NULL);

        $repoP = $this->entity->getRepository("Sisesporte\Entity\Professor");
        $objProfessor = $repoP->findby(array('sqPessoa' => $obj->getSqPessoa()), NULL);

        $repoAP = $this->entity->getRepository("Sisesporte\Entity\AdmissaoProfessor");
        $objAdmissaoProfessor = $repoAP->findby(array('sqProfessor' => $obj->getSqPessoa()), NULL);
        
        $repoM = $this->entity->getRepository("Sisesporte\Entity\ModalidadeProfessor");
        $objModalidadeProfessor = $repoM->findby(array('sqPessoa' => $obj->getSqPessoa()), NULL);

        $i=0;
        foreach ($objModalidadeProfessor as $modalidades){
            $modalidade[$i] = $modalidades->getSqModalidade()->getSqModalidade();
            $i++;
        }
        
        
//        echo '<pre>';
//        var_dump($modalidade);
//        echo '</pre>';
//                exit;

        $utils = new Utils();
        $this->setData(array(
            'noPessoa' => strtoupper($obj->getNoPessoa()),
            'dtNascimento' => $obj->getDtNascimento(),
            'noImagem' => $obj->getTxCaminhoFoto(),
            'nuCpf' => $utils->formatarCpfCnpj($obj->getNuCpf(), TRUE),
            'nuIdentidade' => $obj->getNuIdentidade(),
            'sqOrgaoExpIdentidade' => $obj->getSqOrgaoExpIdentidade()->getSqOrgaoExpedidor(),
            'sqUfOrgExpedidor' => $obj->getSqUfOrgExpedidor()->getSqUf(),
            'dtExpedicao' => $obj->getDtExpedicao(),
            'sqEstadoCivil' => $obj->getSqEstadoCivil()->getSqEstadoCivil(),
            'inSexo' => ($obj->getInSexo()),
            'nuFilho' => ($obj->getNuFilho() == "") ? "0" : $obj->getNuFilho(),
            'sqUfDadosPessoais' => $obj->getSqUfNaturalidade()->getSqUf(),
            'sqCidadeDadosPessoais' => $obj->getSqCidadeNaturalidade()->getSqCidade(),
            'sqCidadeDadosPessoaisH' => $obj->getSqCidadeNaturalidade()->getSqCidade(),
            'noMae' => strtoupper($obj->getNoMae()),
            'noPai' => strtoupper($obj->getNoPai()),
            'nuCep' => strtoupper($objEndereco[0]->getNuCep()),
            'noEndereco' => strtoupper($objEndereco[0]->getNoEndereco()),
            'noComplemento' => strtoupper($objEndereco[0]->getNoComplemento()),
            'noBairro' => strtoupper($objEndereco[0]->getNoBairro()),
            'sqUf' => $objCidade[0]->getSqUf(),
            'sqCidade' => $objEndereco[0]->getSqCidade()->getSqCidade(),
            'sqCidadeH' => $objEndereco[0]->getSqCidade()->getSqCidade(),
            'noTelefoneFixo' => $noTelefoneFixo,
            'noTelefoneMovel' => $noTelefoneMovel,
            'noEmail' => $obj->getNoEmail(),
            'noContato' => $objContato[0]->getNoContato(),
            'noTelefone' => $objContato[0]->getNoTelefone(),
            'deEspecialidade' => $objProfessor[0]->getDeEspecialidade(),
            'coMatricula' => $objProfessor[0]->getCoMatricula(),
            'nuCargaHoraria' => $objAdmissaoProfessor[0]->getNuCargaHoraria(),
            'noLotacao' => $objAdmissaoProfessor[0]->getInLotacao(),
            'coOrgaoAdmissao' => $objAdmissaoProfessor[0]->getCoOrgaoAdmissao(),
            'sqGrauEscolaridade' => $obj->getSqGrauEscolaridade()->getSqGrauEscolaridade(),
            'dtInicioSesp' => $objAdmissaoProfessor[0]->getDtInicioAdmissao(),
            'dtInicioAdmissao' => $objAdmissaoProfessor[0]->getDtAdmissaoOrgao(),
            'dtFinalAdmissao' => $objAdmissaoProfessor[0]->getDtFinalAdmissao(),
            'noCref' => $objProfessor[0]->getNoCref(),
            'sqUfCref' => $objProfessor[0]->getSqUfCref()->getSqUf(),
            'dtExpedicaoCref' => $objProfessor[0]->getDtExpedicaoCref(),
            'dtValidadeCref' => $objProfessor[0]->getDtValidadeCref(),
            'deCategoriaCref' => $objProfessor[0]->getDeCategoriaCref(),
            'deAtuacaoCref' => $objProfessor[0]->getDeAtuacaoCref(),
            'sqModalidade' => $modalidade,
            'txObservacao' => $objAdmissaoProfessor[0]->getTxObservacao(),
        ));
    }

}
